define(function(require, exports, module) {

  // var Backbone = require('backbone');
  var $ = require('jquery');
  var _ = require('lodash');
  // var jsonview = require('jsonview');
  var tmpl = require('text!../tmpl.html');

  function main() {
    var $app = $('<div id="app">');
    $('#main').html($app);

    $app.append(tmpl);
    
//     t1a()
//     t1b()
//     t1c()
    
    t3a()
  }
  
  function t1a() {
    function foo(str, a) { 
        eval( str ); // 欺骗！ 
        console.log( a, b ); 
    } 

    var b = 2; 

    foo( "var b = 3;", 1 ); // 1, 3
    
    console.log(b); // 2
  }
  
  function t1b() {
    function foo(str, a) { 
        eval( str ); // 欺骗！ 
        console.log( a, b ); 
    } 

    var b = 2; 

    foo( "b = 3;", 1 ); // 1, 3
    
    console.log(b); // 3
  }
  
  function t1c() {
    function foo(str) { 
        "use strict"; 
        eval( str ); 
        console.log( a ); // ReferenceError: a is not defined 
    } 
 
    foo( "var a = 2" );
  }
  
  function t2a() {
    var obj = { 
        a: 1, 
        b: 2, 
        c: 3 
    }; 

    // 单调乏味的重复 "obj" 
    obj.a = 2; 
    obj.b = 3; 
    obj.c = 4; 

    // 简单的快捷方式 
    with (obj) { 
        a = 3; 
        b = 4; 
        c = 5; 
    }
    
  }
  
  function t2b() {
    function foo(obj) { 
        with (obj) { 
            a = 2; 
        } 
    } 

    var o1 = { 
        a: 3 
    }; 

    var o2 = { 
        b: 3 
    }; 

    foo( o1 ); 
    console.log( o1.a ); // 2 

    foo( o2 ); 
    console.log( o2.a ); // undefined 
    console.log( a ); // 2——不好，a 被泄漏到全局作用域上了！    
  }
  
  function t3a() {
    const abc = { a: null, b: undefined, c: '', d: 0 }
    const { a = 1, b = 2, c = 3, d = 4 } = abc // 只有undefined会被赋值
    console.log(a, b, c, d) // null, 2, '', 0
  }

  return main;
})
